﻿using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace YF.NLOG
{
    public class LoggerHelper
    {
        private static object lockobj = new object();
        /// <summary>
        /// 实例化nLog，即为获取配置文件相关信息(获取以当前正在初始化的类命名的记录器)
        /// </summary>
        static LoggerHelper()
        {
            NLog.Config.ConfigurationItemFactory.Default.LayoutRenderers.RegisterDefinition("levelx", typeof(NLOG.LevelExLayoutRenderer));//注册自定义的布局生成器，这样config文件中的levelx才能生效
        }

        private readonly NLog.Logger _logger = LogManager.GetCurrentClassLogger();
        private static LoggerHelper _obj;

        public static LoggerHelper _log
        {
            get => _obj ?? (new LoggerHelper());
            set => _obj = value;
        }

        #region Debug，调试
        public void Debug(string msg)
        {
            _logger.Debug(msg);
        }

        public void Debug(string msg, Exception err)
        {
            _logger.Debug(err, msg);
        }
        #endregion

        #region Info，信息
        public void Info(string msg)
        {
            _logger.Info(msg);
        }

        public void Info(string msg, Exception err)
        {
            _logger.Info(err, msg);
        }
        #endregion

        #region Warn，警告
        public void Warn(string msg)
        {
            _logger.Warn(msg);
        }

        public void Warn(string msg, Exception err)
        {
            _logger.Warn(err, msg);
        }
        #endregion

        #region Trace，追踪
        public void Trace(string msg)
        {
            _logger.Trace(msg);
        }

        public void Trace(string msg, Exception err)
        {
            _logger.Trace(err, msg);
        }
        #endregion

        #region Error，错误
        public void Error(string msg)
        {
            _logger.Error(msg);
        }

        public void Error(string msg, Exception err)
        {
            _logger.Error(err, msg);
        }
        #endregion

        #region Fatal,致命错误
        public void Fatal(string msg)
        {
            _logger.Fatal(msg);
        }

        public void Fatal(string msg, Exception err)
        {
            _logger.Fatal(err, msg);
        }
        #endregion

        #region 自定义类型：MES接口日志
        public void Log(LogLevel level, string msg)
        {
            _logger.Log(level, msg);
        }
        public void Mes(string msg)
        {
            _logger.Mes(msg);
        }
        public void Mes(string msg, Exception err)
        {
            _logger.Mes(msg, err);
        }

        #endregion

        #region 自定义类型：设备报警日志
        public void AlarmInfo(string msg)
        {
            _logger.AlarmInfo(msg);
        }
        #endregion


        #region 自定义类型：MES上传追踪日志
        public void MesTrace(string msg)
        {
            _logger.MesTrace(msg);
        }
        #endregion

    }

}
